เรียกใช้ PHP 8.2 โดยใช้ Nginx ใน EC2 (Amazon Linux 2023) บน AWS
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
การเรียกใช้ PHP โดยใช้ Nginx จะทำงานได้เร็วกว่าการใช้ Apache นั่นเป็นสาเหตุที่ Nginx เป็นที่นิยมในทุกวันนี้ โดยการแนะนำครั้งนี้จะอธิบายวิธีการตั้งค่าสำหรับการใช้งาน Nginx ร่วมกับ EC2 ครับ
เป้าหมายในการทำ
เมื่อ User ทำการเชื่อมต่อจากเว็บเบราว์เซอร์แล้ว Nginx จะดำเนินการ และเมื่อเริ่มต้นระบบ php-fpm ก็จะทำให้สามารถใช้งาน info.php ได้ครับ ! แต่ถ้าไม่มี php-fpm ก็จะไม่สามารถใช้งาน info.php ได้ครับ
สิ่งที่จะทำในบทความนี้
- Launch instance
- ติดตั้ง PHP 8.2
- ติดตั้ง Nginx
- ตั้งค่าการใช้งาน Nginx
- ทดสอบหน้าเว็บไซต์
สิ่งที่ต้องมี
Launch instance
※ติดตั้ง EC2 Instance (Amazon Linux 2023) สำหรับใช้กับ Nginx แล้ว
ดูตัวอย่างการสร้าง Amazon Linux 2023 ได้ที่ลิงก์บทความด้านล่างนี้ (ลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดู ตัวอย่างการสร้าง EC2 Instance ประกอบด้วย)
ตัวอย่างการสร้าง EC2 Instance
Region:
Singapore
※Launch instances
Name and tags
Name:tinnakorn-test
(ตั้งชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3a.micro
(เลือกสเปคตามต้องการ)Key pair (login)
Key pair name - required:tinnakorn-test
(key pair ที่สร้างขึ้นเมื่อสักครู่นี้)Network settings
Firewall (security groups)
Security group name - required:tinnakorn-test
(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-test
(ป้อนตามต้องการ)
Inbound security groups rules
Security group rule 1 (TCP, 22, xxx.xxx.xxx.xxx/32)
Type:ssh
| Source type:My IP
| Source:xxx.xxx.xxx.xxx/32
Configure storage
1x:8
GiBgp2
Root volume (Default)
เพิ่ม HTTP ใน Security Group ของ EC2
เมื่อติดตั้ง EC2 Instance เรียบร้อยแล้ว ให้เพิ่ม HTTP ใน Security Group ของ EC2 Instance เพื่อใช้ในการสื่อสารระหว่างเว็บเซิร์ฟเวอร์ (web server) และเบราว์เซอร์ (web browser) ครับ
เข้ามาที่หน้าจอ EC2 Instance แล้วเลือก Instance ของเรา แล้วเลือกแท็บ Security
และคลิกที่ Security Groups
เลือกแท็บ Inbound rules
และเลือก Edit inbound rules
เมื่อเข้ามาที่ Edit inbound rules แล้วทำการตั้งค่าดังนี้:
・คลิกปุ่ม Add rule
แล้วจะมี Security group rule เพิ่มขึ้นมา
・เลือก Type: HTTP ▼
・เลือก Source: Anywhere-IPv4 ▼
・คลิก Save rules
จะเห็นว่ามี Security group rule ที่เป็นโปรโตคอล HTTP เพิ่มขึ้นมาแล้ว การตั้งค่าในส่วนนี้ก็เสร็จเรียบร้อยแล้วครับ
เตรียมการเชื่อมต่อกับ EC2 Instance
ก่อนติดตั้งคำสั่งที่ต้องใช้สิทธิ์ root
ควรติดตั้งคำสั่งตามด้านล่างนี้ก่อน
คำสั่งเข้าสู่ระบบผู้ใช้ระดับสูงสุดหรือ root (Superuser)
sudo su -
คำสั่งอัปเดตโปรแกรมและแพคเกจต่าง ๆ ในระบบ
yum update -y
ติดตั้ง PHP 8.2 ใน Amazon Linux 2023
คำสั่งติดตั้ง PHP 8.2
yum install -y php8.2
ตรวจสอบ Version PHP
php -v
Output
[root@ip-xx-xx-xx-xx ~]# php -v
PHP 8.2.15 (cli) (built: Jan 16 2024 12:19:32) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.15, Copyright (c) Zend Technologies
with Zend OPcache v8.2.15, Copyright (c), by Zend Technologies
[root@ip-xx-xx-xx-xx ~]#
ติดตั้ง Nginx ใน Amazon Linux 2023
คำสั่งติดตั้ง Nginx
yum install -y nginx
ตรวจสอบ Version Nginx
nginx -v
Output
[root@ip-xx-xx-xx-xx ~]# nginx -v
nginx version: nginx/1.24.0
[root@ip-xx-xx-xx-xx ~]#
ตั้งค่าการใช้งาน Nginx
รันคำสั่งสร้างโฟลเดอร์ html
mkdir -p /var/www/html
รันคำสั่งเปลี่ยนแปลงสิทธิ์การเข้าถึงไฟล์หรือไดเรกทอรีที่ต้องการ เช่น โฟลเดอร์ html
chmod 777 /var/www/html
รันคำสั่งแก้ไขไฟล์ nginx.conf
vi /etc/nginx/nginx.conf
เมื่อเข้ามาที่ไฟล์ nginx.conf แล้วทำการแก้ไขดังนี้:
・กดปุ่ม i
ให้คำว่า "/etc/nginx/nginx.conf"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น -- INSERT --
・เลื่อนลงมาด้านล่างจนเจอคำว่า server
・ค้นหา root
ใน server และลบ /usr/share/nginx/html;
ออกไป
・คัดลอก Path [/var/www/html;
] นี้ แล้ววางใน root แทนที่คำว่า /usr/share/nginx/html;
ที่ลบไปเมื่อสักครู่นี้
Output
"...ไม่ได้แสดง Code ส่วนบน..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html; # เปลี่ยนที่อยู่ root ที่นี่
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
"...ไม่ได้แสดง Code ส่วนล่าง..."
-- INSERT -- 48,31 40% # กดปุ่ม i ที่แป้นพิมพ์
เมื่อเปลี่ยน path root เสร็จแล้ว ให้ Save ตามนี้:
・กดปุ่ม Esc
ให้คำว่า -- INSERT --
ที่อยู่ด้านล่างซ้ายหายไป
・พิมพ์ :x
หรือ :wq
+ Enter เพื่อบันทึก
Output
"...ไม่ได้แสดง Code ส่วนบน..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
"...ไม่ได้แสดง Code ส่วนล่าง..."
:x
เริ่มต้นระบบ Nginx
ต่อไปรันคำสั่งตามด้านล่างนี้เพื่อเริ่มต้นระบบ Nginx
รันคำสั่งเริ่มต้นระบบ Nginx
systemctl start nginx
รันคำสั่งเปิดการใช้งาน Nginx
systemctl enable nginx
ทดสอบหน้าเว็บไซต์โดยรัน Server ผ่าน Nginx
ต่อไปรันคำสั่งเข้าไปที่ path /var/www/html
cd /var/www/html
แล้วรันคำสั่งสร้างไฟล์ index.html
เพื่อใช้ในการทดสอบหน้าเว็บไซต์
vi index.html
เมื่อเข้ามาที่ไฟล์ index.html แล้วทำการแก้ไขดังนี้:
・กดปุ่ม i
ให้คำว่า "index.html"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น -- INSERT --
・คัดลอก Code ด้านล่างนี้ และนำไปวางในไฟล์ index.html
ที่เรากำลังแก้ไขอยู่โดยคลิกขวาเพื่อวางได้เลย
<html><body>Test</body></html>
Output
<html><body>Test</body></html> // วาง Code ที่นี่
~
~
~
~
~
~
-- INSERT -- 1,31 All // กดปุ่ม i ที่แป้นพิมพ์
เมื่อวาง Code เสร็จแล้ว กดปุ่ม Esc
ให้ --INSERT--
หายไป
แล้วพิมพ์ :x
หรือ :wq
เพื่อทำการ Save
Output
<html><body>Test</body></html> // วาง Code ที่นี่
~
~
~
~
~
~
:x
ต่อไปจะใช้ไฟล์ index.html ในการทดสอบหน้าเว็บไซต์ผ่าน Public IPv4 address ของ EC2 Instance
ไปที่หน้าจอ EC2 Instance ของเรา แล้วคัดลอก Public IPv4 address
และนำไปเปิดที่เว็บเบราว์เซอร์ที่เราใช้งาน
แล้วจะเห็นข้อความคำว่า Test
ตามที่ได้สร้างไว้ในไฟล์ index.html เมื่อสักครู่นี้
ทดสอบหน้าเว็บไซต์โดยรัน Server ผ่าน PHP 8.2
รันคำสั่งเพื่อสร้างไฟล์ info.php
และใช้ในการทดสอบหน้าเว็บไซต์
vi info.php
เมื่อเข้ามาที่ไฟล์ info.php แล้วทำการแก้ไขดังนี้:
・กดปุ่ม i
ให้คำว่า "info.php"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น -- INSERT --
・คัดลอก Code ด้านล่างนี้ และนำไปวางในไฟล์ info.php
ที่เรากำลังแก้ไขอยู่โดยคลิกขวาเพื่อวางได้เลย
<?php phpinfo();
Output
<?php
phpinfo();
~
~
~
~
~
-- INSERT -- 2,11 All // กดปุ่ม i ที่แป้นพิมพ์
เมื่อวาง Code เสร็จแล้ว กดปุ่ม Esc
ให้ --INSERT--
หายไป
แล้วพิมพ์ :x
หรือ :wq
เพื่อทำการ Save
Output
<?php
phpinfo();
~
~
~
~
~
:x
ต่อไปจะใช้ไฟล์ info.php ในการทดสอบหน้าเว็บไซต์ผ่าน Public IPv4 address ของ EC2 Instance
กลับมาที่เว็บเบราว์เซอร์ที่เราทดสอบเมื่อสักครู่นี้ แล้วเพิ่ม /info.php
+ Enter อีกครั้งตามตัวอย่างด้านล่างนี้ครับ
http://[IP Address]/info.php
แล้วจะเห็นหน้าจอเว็บไซต์ของ "PHP Version 8.2.xx" แบบนี้ครับ
แล้วสังเกตที่ Server API: FPM/FastCGI
คือเมื่อรัน PHP โดยใช้ Nginx ก็จะเป็นการรันจาก library ที่เรียกว่า FPM / FastCGI
นั่นเอง
สุดท้ายนี้เราจะมาตรวจสอบสถานะ FPM/FastCGI โดยรันคำสั่งตามด้านล่างนี้
php-fpm -v
Output
[root@ip-xx-xx-xx-xx html]# php-fpm -v
PHP 8.2.15 (fpm-fcgi) (built: Jan 16 2024 12:19:32)
Copyright (c) The PHP Group
Zend Engine v4.2.15, Copyright (c) Zend Technologies
with Zend OPcache v8.2.15, Copyright (c), by Zend Technologies
[root@ip-xx-xx-xx-xx html]#
เพียงเท่านี้ก็สามารถเรียกใช้ PHP 8.2 โดยใช้ Nginx ใน EC2 (Amazon Linux 2023) บน AWS ได้อย่างมีประสิทธิภาพครับ
สรุป
เมื่อผู้ใช้งานทำการเชื่อมต่อจากเว็บเบราว์เซอร์แล้ว Nginx ก็จะดำเนินการ และเมื่อเริ่มต้นระบบ php-fpm ก็จะทำให้สามารถใช้งาน info.php ได้ ! แต่ถ้าไม่มี php-fpm ก็จะไม่สามารถใช้งาน info.php ได้ ดังนั้นถ้าเราติดตั้ง Nginx แล้วเราต้องติดตั้ง PHP8.0 และเปิดใช้งาน php-fpm ไว้ด้วยจึงจะสามารถใช้งานได้ครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !
บทความที่เกี่ยวข้อง
- วิธีติดตั้ง Amazon Linux 2023 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- วิธีติดตั้ง PHP 8.2 และ Apache ใน Amazon Linux 2023 บน EC2
- 【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- วิธี Install PHP 8.0 and Apache ใน Amazon Linux 2 ของ EC2
- เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2) บน AWS